//package com.york.jobmew.gateway.blackfilter;
//
//import com.york.jobmew.gateway.utils.NetUtils;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.Ordered;
//import org.springframework.core.io.buffer.DataBuffer;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.MediaType;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
//import java.nio.charset.StandardCharsets;
//
///**
// * 全局 IP 黑名单过滤请求拦截器
// * 对符合IP黑名单内的机器禁止访问
// */
//@Component
//public class BlackIpFilter implements GlobalFilter, Ordered {
//
//    private final BlackIpUtils blackIpUtils;
//
//    // 通过构造函数注入 BlackIpUtils
//    public BlackIpFilter(BlackIpUtils blackIpUtils) {
//        this.blackIpUtils = blackIpUtils;
//    }
//
//    @Override
//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        String ipAddress = NetUtils.getIpAddress(exchange.getRequest());
//
//        if (blackIpUtils.isBlackIp(ipAddress)) {
//            // 如果 IP 在黑名单中，返回 403 禁止访问
//            exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
//            exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
//
//            // 构造错误信息
//            String errorResponse = String.format(
//                    "{" +
//                            "\"errorCode\": \"-1\"," +
//                            "\"errorMsg\": \"黑名单IP，禁止访问\"," +
//                            "\"ipAddress\": \"%s\"," +
//                            "\"reason\": \"该IP地址已被列入黑名单，请联系管理员解除限制\"" +
//                            "}",
//                    ipAddress
//            );
//
//            // 将错误信息写入响应
//            byte[] bytes = errorResponse.getBytes(StandardCharsets.UTF_8);
//            DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);
//            return exchange.getResponse().writeWith(Mono.just(buffer));
//        }
//
//        // 正常放行
//        return chain.filter(exchange);
//    }
//
//    @Override
//    public int getOrder() {
//        return Ordered.HIGHEST_PRECEDENCE; // 设置最高优先级
//    }
//}